package net.dfx.iot_download_tool.itf;

import java.util.List;

import net.dfx.iot_download_tool.enu.TimeModeEnum;
import net.dfx.iot_download_tool.enu.TimePrefixEnum;
import net.dfx.iot_download_tool.enu.TimeUnitEnum;
import net.dfx.iot_download_tool.vo.LocalSETimeVO;
import net.dfx.iot_download_tool.vo.UserEnterVO;

public interface IUserEnter {
	/**
	 * 获取用户数据所有参数的方法
	 * @return {@link UserEnterVO} 封装VO类
	 */
	public UserEnterVO getAllUserEnter();
	/**
	 * 从控制台获取用户输入的Excel文件保存路径的目录绝对路径
	 * @return {@link String} 返回拼装好的路径字符串
	 */
	public String excelPathPre();
	/**
	 * 获取设备名称
	 * @return {@link List}{@code <}{@link String}{@code >}返回设备名称字符串集合
	 */
	public List<String> equipEnter();
	/**
	 * 从控制台获取用户输入的一个设备本次要查询的参数，多参数仅支持用英文逗号隔开
	 * @return {@link List}{@code <}{@link String}{@code >}返回输入的所有参数集合
	 */
	public List<String> paramEnter();
	/**
	 * 由用户选择时间输入模式；<br>1-仅输入一个日期，例如：2025-08-14；<br>2-输入一个日期范围，例如：2025-08-14,2025-08-14；<br>3-输入一个日期时间，例如：2025-07-24 10:00:01；<br>4-输入一个或多个日期时间范围，例如：2025-07-24 10:00:01,2025-07-25 08:59:59,2025-08-14 10:00:01,2025-08-15 08:59:59
	 * @return enum 类型的模式编码，关于这种类别参考
	 * @see TimeModeEnum
	 */
	public TimeModeEnum timeMode();
	/**
	 * 从控制台获取用户输入的一个日期字符串，并格式化为本地时间，2025-08-14
	 * @return {@link LocalSETimeVO} 返回格式化成本地时间之后的起始时间、终止时间对象集合，2025-08-14格式化成本地时间2025-08-14 00:00:01,2025-08-14 23:59:59
	 */
	public LocalSETimeVO dateEnter();
	/**
	 * 从控制台获取用户输入的一个或多个日期字符串参数，并格式化为本地时间，2025-08-14,2025-08-14，必须是成对出现的
	 * @return {@link List}{@code <}{@link LocalSETimeVO}{@code >} 返回格式化成本地时间之后的起始时间、终止时间对象集合，2025-08-14 00:00:01,2025-08-14 23:59:59
	 */
	public List<LocalSETimeVO> dateRangEnter();
	/**
	 * 从控制台获取用户输入的一个日期时间字符串参数，并格式化为本地时间，2025-08-14 00:00:01
	 * @return {@link LocalSETimeVO} 返回格式化成本地时间之后的起始时间、终止时间对象集合
	 */
	public LocalSETimeVO datetimeEnter();
	/**
	 * 从控制台获取用户输入的一个或多个日期时间字符串参数，并格式化为本地时间，2025-08-14 00:00:01,2025-08-14 23:59:59为一个用户输入的时间范围，所以用户输入的时间范围必须是成对出现的
	 * @return {@link List}{@code <}{@link LocalSETimeVO}{@code >} 返回格式化成本地时间之后的起始时间、终止时间对象集合
	 */
	public List<LocalSETimeVO> datetimeRangEnter();
	/**
	 * 当用户选择的时间模式是1、3时，需要再确认往前追溯时间例如：2025-08-01则向2025-07-20方向 或 往后追溯时间2025-08-01则向2025-08-02方向
	 * @return {@link TimePrefixEnum} 返回模式对应的enum对象
	 * @see IUserEnter#dateEnter()
	 * @see IUserEnter#datetimeEnter()
	 */
	public TimePrefixEnum prefixMode();
	/**
	 * 用户选择时间追溯方式后需要输入一个时间长度
	 * @return long型数字
	 * @see IUserEnter#prefixMode()
	 */
	public long betweenDay();
	/**
	 * 获取用户输入的追溯时间的单位
	 * @return {@link TimeUnitEnum} 返回模式对应的enum对象
	 * @see IUserEnter#betweenDay()
	 */
	public TimeUnitEnum unitMode();
}
